Phần 1: Giới Thiệu Đề tài phân tích và dự đoán giá điện thoại Nguồn Dữ Liệu: link: https://www.kaggle.com/datasets/iabhishekofficial/mobile-price-classification?datasetId=11167 tập dữ liệu: train.csv, test.csv Giới thiệu sơ lược về dữ liệu
Bộ dữ liệu gồm 21 cột và 2000 dòng : +Id +battery_power: Tổng năng lượng pin có thể lưu trữ +blue: Có bluetooth hay không +clock_speed:tốc độ mà bộ vi xử lý thực hiện các lệnh +dual_sim: có hỗ trợ hai sim hay không +fc: Độ phân giải camera trước +four_g: có 4g hay không +int_memory: dung lượng bộ nhớ trong +m_dep: độ dày điện thoại +mobile_wt: độ nặng điện thoại +n_cores:Số lõi của bộ xử lý +pc: Độ phân giải camera sau +px_height: chiều cao của độ phân giải màn hình +px_width: chiều rộng của độ phân giải màn hình +ram: Dung lượng của Ram +sc_h: chiều cao màn hình +sc_w: chiều rộng màn hình +talk_time: thời gian dài nhất khi sạc điện thoại +three_g: có 3g hay không +touch_screen: có màn hình cảm ứng hay không +wifi: có wifi hay không +price_range: khoảng giá trị chi phí điện thoại (0,1,2,3)
Kế Hoạch Phân Tích Dữ Liệu + Biến dự đoán: price_range + Biến sử dụng để dự đoán: các biến còn lại
Phần 2: Dữ Liệu
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.3
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.6 v dplyr 1.0.8
## v tidyr 1.2.0 v stringr 1.4.0
## v readr 2.1.2 v forcats 0.5.1
## Warning: package 'ggplot2' was built under R version 4.1.3
## Warning: package 'tibble' was built under R version 4.1.3
## Warning: package 'tidyr' was built under R version 4.1.3
## Warning: package 'readr' was built under R version 4.1.3
## Warning: package 'purrr' was built under R version 4.1.3
## Warning: package 'dplyr' was built under R version 4.1.3
## Warning: package 'forcats' was built under R version 4.1.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(ggplot2)
library(rpart)
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.1.3
library(rattle)
## Warning: package 'rattle' was built under R version 4.1.3
## Loading required package: bitops
## Rattle: A free graphical interface for data science with R.
## Version 5.5.1 Copyright (c) 2006-2021 Togaware Pty Ltd.
## Type 'rattle()' to shake, rattle, and roll your data.
library(tree)
library('class')
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.1.3
## corrplot 0.92 loaded
library(RColorBrewer)
library(e1071)
## Warning: package 'e1071' was built under R version 4.1.3
library(plotly)
## Warning: package 'plotly' was built under R version 4.1.3
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(rsample)
## Warning: package 'rsample' was built under R version 4.1.3
##
## Attaching package: 'rsample'
## The following object is masked from 'package:e1071':
##
## permutations
df <- read.csv('C:/Users/quocd/OneDrive/Desktop/hellofile/datamining/train.csv')
df.split <- rsample::initial_split(
df,
prop=0.75, # 75% training, 25% testing
strata=price_range)
df.train <- rsample::training(df.split)
df.test <- rsample::testing(df.split)
head(df.train)
## battery_power blue clock_speed dual_sim fc four_g int_memory m_dep mobile_wt
## 8 1954 0 0.5 1 0 0 24 0.8 187
## 10 509 1 0.6 1 2 1 9 0.1 93
## 15 1866 0 0.5 0 13 1 52 0.7 185
## 16 775 0 1.0 0 3 0 46 0.7 159
## 32 1568 1 0.5 0 16 0 33 1.0 150
## 35 644 1 2.7 0 0 0 22 0.7 157
## n_cores pc px_height px_width ram sc_h sc_w talk_time three_g touch_screen
## 8 4 0 512 1149 700 16 3 5 1 1
## 10 5 15 1137 1224 513 19 10 12 1 0
## 15 1 17 356 563 373 14 9 3 1 0
## 16 2 16 862 1864 568 17 15 11 1 1
## 32 8 20 413 654 508 5 1 6 1 1
## 35 8 3 311 881 1262 12 1 15 1 0
## wifi price_range
## 8 1 0
## 10 0 0
## 15 1 0
## 16 1 0
## 32 1 0
## 35 0 0
dim(df.train)
## [1] 1500 21
summary(df.train)
## battery_power blue clock_speed dual_sim
## Min. : 502.0 Min. :0.00 Min. :0.500 Min. :0.0000
## 1st Qu.: 857.8 1st Qu.:0.00 1st Qu.:0.700 1st Qu.:0.0000
## Median :1231.5 Median :0.00 Median :1.500 Median :1.0000
## Mean :1241.1 Mean :0.49 Mean :1.517 Mean :0.5107
## 3rd Qu.:1614.0 3rd Qu.:1.00 3rd Qu.:2.200 3rd Qu.:1.0000
## Max. :1997.0 Max. :1.00 Max. :3.000 Max. :1.0000
## fc four_g int_memory m_dep
## Min. : 0.000 Min. :0.0000 Min. : 2.00 Min. :0.1000
## 1st Qu.: 1.000 1st Qu.:0.0000 1st Qu.:16.00 1st Qu.:0.2000
## Median : 3.000 Median :1.0000 Median :31.50 Median :0.5000
## Mean : 4.309 Mean :0.5147 Mean :32.04 Mean :0.5019
## 3rd Qu.: 7.000 3rd Qu.:1.0000 3rd Qu.:47.00 3rd Qu.:0.8000
## Max. :19.000 Max. :1.0000 Max. :64.00 Max. :1.0000
## mobile_wt n_cores pc px_height
## Min. : 80.0 Min. :1.000 Min. : 0.000 Min. : 0.0
## 1st Qu.:109.0 1st Qu.:3.000 1st Qu.: 4.000 1st Qu.: 280.8
## Median :141.0 Median :4.000 Median :10.000 Median : 546.5
## Mean :140.1 Mean :4.535 Mean : 9.815 Mean : 639.0
## 3rd Qu.:170.0 3rd Qu.:7.000 3rd Qu.:15.000 3rd Qu.: 935.2
## Max. :200.0 Max. :8.000 Max. :20.000 Max. :1949.0
## px_width ram sc_h sc_w
## Min. : 500.0 Min. : 256 Min. : 5.00 Min. : 0.000
## 1st Qu.: 868.5 1st Qu.:1208 1st Qu.: 9.00 1st Qu.: 2.000
## Median :1246.0 Median :2156 Median :12.00 Median : 5.000
## Mean :1246.7 Mean :2125 Mean :12.32 Mean : 5.785
## 3rd Qu.:1629.2 3rd Qu.:3064 3rd Qu.:16.00 3rd Qu.: 9.000
## Max. :1998.0 Max. :3998 Max. :19.00 Max. :18.000
## talk_time three_g touch_screen wifi
## Min. : 2.00 Min. :0.000 Min. :0.0000 Min. :0.0000
## 1st Qu.: 7.00 1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :11.00 Median :1.000 Median :1.0000 Median :0.0000
## Mean :11.16 Mean :0.756 Mean :0.5107 Mean :0.4987
## 3rd Qu.:16.00 3rd Qu.:1.000 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :20.00 Max. :1.000 Max. :1.0000 Max. :1.0000
## price_range
## Min. :0.00
## 1st Qu.:0.75
## Median :1.50
## Mean :1.50
## 3rd Qu.:2.25
## Max. :3.00
df.train = na.omit(df.train)
df.test = na.omit(df.test)
?cor()
## starting httpd help server ... done
duplicated(df.train)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [409] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [421] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [433] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [445] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [457] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [469] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [481] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [493] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [505] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [517] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [529] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [541] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [553] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [565] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [577] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [589] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [601] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [613] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [625] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [637] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [649] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [661] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [673] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [685] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [697] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [709] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [721] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [733] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [745] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [757] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [769] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [781] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [793] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [805] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [817] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [829] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [841] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [853] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [865] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [877] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [889] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [901] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [913] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [925] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [937] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [949] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [961] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [973] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [985] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [997] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1009] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1021] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1033] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1045] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1057] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1069] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1081] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1093] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1105] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1117] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1129] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1141] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1153] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1165] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1177] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1189] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1201] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1213] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1225] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1237] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1249] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1261] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1273] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1285] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1297] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1309] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1321] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1333] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1345] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1357] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1369] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1381] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1393] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1405] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1417] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1429] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1441] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1453] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1465] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1477] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1489] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
duplicated(df.test)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [409] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [421] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [433] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [445] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [457] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [469] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [481] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [493] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
cor(df.train)
## battery_power blue clock_speed dual_sim
## battery_power 1.0000000000 0.0161687628 0.0067016035 -0.044862216
## blue 0.0161687628 1.0000000000 0.0145180411 0.052449092
## clock_speed 0.0067016035 0.0145180411 1.0000000000 0.005637163
## dual_sim -0.0448622162 0.0524490916 0.0056371634 1.000000000
## fc 0.0247674937 0.0232927709 0.0027545315 -0.032690356
## four_g 0.0199387104 0.0072579076 -0.0573826704 -0.005963034
## int_memory -0.0024487999 0.0534140922 -0.0300320053 -0.021147134
## m_dep 0.0180279418 0.0093690006 -0.0281770229 -0.031553643
## mobile_wt 0.0259586033 -0.0064856319 0.0356514412 -0.022803886
## n_cores -0.0177411620 0.0527160495 -0.0063607513 -0.031948298
## pc 0.0319934689 -0.0102960831 -0.0162858845 -0.023118330
## px_height 0.0174027193 0.0078821917 -0.0098093787 -0.019620695
## px_width -0.0004907734 -0.0316993038 0.0007595226 0.012572337
## ram 0.0153362192 0.0366201558 -0.0199962418 0.040408509
## sc_h -0.0227189911 -0.0057384144 -0.0012248462 -0.007560082
## sc_w -0.0008134113 0.0214954626 0.0031684454 -0.018677024
## talk_time 0.0144587310 0.0024308879 0.0055823016 -0.052555861
## three_g 0.0115502480 -0.0393100420 -0.0466925694 -0.012718671
## touch_screen -0.0048061387 -0.0009070545 0.0240149372 -0.013794723
## wifi -0.0108700009 -0.0227246262 -0.0383335725 0.010726035
## price_range 0.2132462405 0.0411518820 -0.0331611410 0.020278298
## fc four_g int_memory m_dep mobile_wt
## battery_power 0.024767494 0.019938710 -0.002448800 0.0180279418 0.025958603
## blue 0.023292771 0.007257908 0.053414092 0.0093690006 -0.006485632
## clock_speed 0.002754531 -0.057382670 -0.030032005 -0.0281770229 0.035651441
## dual_sim -0.032690356 -0.005963034 -0.021147134 -0.0315536434 -0.022803886
## fc 1.000000000 -0.002570972 0.002310680 0.0031868746 0.005784563
## four_g -0.002570972 1.000000000 0.013032115 0.0072036550 -0.016554275
## int_memory 0.002310680 0.013032115 1.000000000 0.0178134630 -0.043980038
## m_dep 0.003186875 0.007203655 0.017813463 1.0000000000 0.046793257
## mobile_wt 0.005784563 -0.016554275 -0.043980038 0.0467932568 1.000000000
## n_cores -0.019637727 -0.037348259 -0.025041963 0.0009156771 0.009914050
## pc 0.652122031 0.016968308 -0.021273639 0.0299655187 0.024291907
## px_height -0.006590821 -0.025824771 0.015431265 0.0062239689 -0.003082136
## px_width 0.005290189 -0.015008533 0.004010831 0.0172273172 0.017923230
## ram 0.009237142 0.011502956 0.045490311 0.0002751541 -0.010363590
## sc_h -0.013013137 0.031762809 0.036865628 -0.0220326109 -0.047147059
## sc_w 0.007312654 0.047803722 0.004508431 0.0014318417 -0.018342096
## talk_time -0.008961408 -0.034967236 -0.026386540 -0.0281592184 0.021844427
## three_g 0.004681036 0.585028436 -0.012051909 -0.0011657674 0.003655296
## touch_screen 0.004824658 0.018052764 -0.020036869 -0.0093778828 -0.003117977
## wifi 0.011815305 -0.005257392 0.031382958 -0.0161489591 0.005373538
## price_range 0.019337935 0.020282411 0.053645630 0.0057837761 -0.034660253
## n_cores pc px_height px_width
## battery_power -0.0177411620 0.031993469 0.017402719 -0.0004907734
## blue 0.0527160495 -0.010296083 0.007882192 -0.0316993038
## clock_speed -0.0063607513 -0.016285884 -0.009809379 0.0007595226
## dual_sim -0.0319482980 -0.023118330 -0.019620695 0.0125723368
## fc -0.0196377267 0.652122031 -0.006590821 0.0052901886
## four_g -0.0373482595 0.016968308 -0.025824771 -0.0150085328
## int_memory -0.0250419635 -0.021273639 0.015431265 0.0040108313
## m_dep 0.0009156771 0.029965519 0.006223969 0.0172273172
## mobile_wt 0.0099140505 0.024291907 -0.003082136 0.0179232301
## n_cores 1.0000000000 -0.005766890 0.006023692 0.0165248231
## pc -0.0057668904 1.000000000 -0.022458063 0.0114332923
## px_height 0.0060236920 -0.022458063 1.000000000 0.5198784173
## px_width 0.0165248231 0.011433292 0.519878417 1.0000000000
## ram 0.0050092223 0.036211511 -0.006425915 0.0114017455
## sc_h -0.0056175585 -0.002570762 0.051109349 0.0190378969
## sc_w 0.0250933247 -0.010772943 0.028999309 0.0360486643
## talk_time -0.0011794900 0.003152582 -0.011101879 0.0095917054
## three_g -0.0302031693 0.010546271 -0.043552638 -0.0189697158
## touch_screen 0.0043601353 -0.004849872 0.023410738 -0.0136633262
## wifi -0.0104982027 -0.010424038 0.048430336 0.0313367017
## price_range 0.0018328630 0.044875034 0.156685148 0.1687170695
## ram sc_h sc_w talk_time
## battery_power 0.0153362192 -0.022718991 -0.0008134113 0.014458731
## blue 0.0366201558 -0.005738414 0.0214954626 0.002430888
## clock_speed -0.0199962418 -0.001224846 0.0031684454 0.005582302
## dual_sim 0.0404085086 -0.007560082 -0.0186770241 -0.052555861
## fc 0.0092371421 -0.013013137 0.0073126537 -0.008961408
## four_g 0.0115029565 0.031762809 0.0478037216 -0.034967236
## int_memory 0.0454903112 0.036865628 0.0045084313 -0.026386540
## m_dep 0.0002751541 -0.022032611 0.0014318417 -0.028159218
## mobile_wt -0.0103635898 -0.047147059 -0.0183420957 0.021844427
## n_cores 0.0050092223 -0.005617558 0.0250933247 -0.001179490
## pc 0.0362115113 -0.002570762 -0.0107729428 0.003152582
## px_height -0.0064259151 0.051109349 0.0289993085 -0.011101879
## px_width 0.0114017455 0.019037897 0.0360486643 0.009591705
## ram 1.0000000000 0.032142927 0.0670100735 0.002731282
## sc_h 0.0321429273 1.000000000 0.5115564500 -0.020388314
## sc_w 0.0670100735 0.511556450 1.0000000000 -0.018580145
## talk_time 0.0027312816 -0.020388314 -0.0185801452 1.000000000
## three_g 0.0188379804 0.024381347 0.0442164420 -0.045275868
## touch_screen -0.0379200991 -0.017302456 0.0131372600 0.025869921
## wifi 0.0072210125 0.043243937 0.0391684747 -0.019094802
## price_range 0.9183849779 0.033863847 0.0625743091 0.005844182
## three_g touch_screen wifi price_range
## battery_power 0.011550248 -0.0048061387 -0.010870001 0.213246240
## blue -0.039310042 -0.0009070545 -0.022724626 0.041151882
## clock_speed -0.046692569 0.0240149372 -0.038333573 -0.033161141
## dual_sim -0.012718671 -0.0137947226 0.010726035 0.020278298
## fc 0.004681036 0.0048246581 0.011815305 0.019337935
## four_g 0.585028436 0.0180527640 -0.005257392 0.020282411
## int_memory -0.012051909 -0.0200368692 0.031382958 0.053645630
## m_dep -0.001165767 -0.0093778828 -0.016148959 0.005783776
## mobile_wt 0.003655296 -0.0031179770 0.005373538 -0.034660253
## n_cores -0.030203169 0.0043601353 -0.010498203 0.001832863
## pc 0.010546271 -0.0048498720 -0.010424038 0.044875034
## px_height -0.043552638 0.0234107379 0.048430336 0.156685148
## px_width -0.018969716 -0.0136633262 0.031336702 0.168717070
## ram 0.018837980 -0.0379200991 0.007221012 0.918384978
## sc_h 0.024381347 -0.0173024564 0.043243937 0.033863847
## sc_w 0.044216442 0.0131372600 0.039168475 0.062574309
## talk_time -0.045275868 0.0258699210 -0.019094802 0.005844182
## three_g 1.000000000 0.0276482040 0.014007272 0.026378587
## touch_screen 0.027648204 1.0000000000 0.040066150 -0.031013867
## wifi 0.014007272 0.0400661496 1.000000000 0.001192574
## price_range 0.026378587 -0.0310138675 0.001192574 1.000000000
corrplot(cor(df.train), type='upper', order='hclust', col=brewer.pal(n=8, name="RdYlBu"))
corrplot(cor(df.train), method = "number",
type = "upper",
tl.cex = 0.8,
tl.srt = 40,
tl.col = "red")
Từ hình dung ma trận tương quan này, thấy rằng 2 đặc điểm có tương quan
cao nhất là: “price_range” và “ram”
Liên quan đến price_range (biến dùng dự đoán), ta cũng có thể thấy rằng “pin_power” và “px_height” đều có tương quan nhẹ với “price_range”
ggplot(data = df.train, mapping=aes(x=ram, y=price_range)) +
geom_smooth(se=FALSE, color='darkgreen', method='gam', formula = y ~ s(x, bs = "cs")) +
ggtitle('Ram v. Price Range: +90% correlation') +
theme(plot.title = element_text(face="bold")) +
labs(x = 'Ram', y='Price Range')
ggplot(data = df.train, mapping=aes(x=battery_power, y=price_range)) +
geom_smooth(se=FALSE, color='darkblue', method='gam', formula = y ~ s(x, bs = "cs")) +
ggtitle('Battery Power v. Price Range: +20% correlation') +
theme(plot.title = element_text(face="bold")) +
labs(x = 'Battery Power', y='Price Range')
ggplot(data = df.train, mapping=aes(x=px_height, y=price_range)) +
geom_smooth(se=FALSE, color='red', method='gam', formula = y ~ s(x, bs = "cs")) +
ggtitle('Pixel Height v. Price Range: ~15% correlation') +
theme(plot.title = element_text(face="bold")) +
labs(x = 'Pixel Height', y='Price Range')
#Xây dựng mô hình cây quyết định
library(rpart)
library(rpart.plot)
fit <- rpart(price_range~., data = df.train, method = 'class')
fit
## n= 1500
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 1500 1125 0 (0.25000000 0.25000000 0.25000000 0.25000000)
## 2) ram< 2235.5 781 406 0 (0.48015365 0.42253521 0.09731114 0.00000000)
## 4) ram< 1123.5 340 38 0 (0.88823529 0.11176471 0.00000000 0.00000000) *
## 5) ram>=1123.5 441 149 1 (0.16553288 0.66213152 0.17233560 0.00000000)
## 10) battery_power< 1008 152 65 1 (0.38815789 0.57236842 0.03947368 0.00000000)
## 20) ram< 1541 58 10 0 (0.82758621 0.17241379 0.00000000 0.00000000) *
## 21) ram>=1541 94 17 1 (0.11702128 0.81914894 0.06382979 0.00000000) *
## 11) battery_power>=1008 289 84 1 (0.04844291 0.70934256 0.24221453 0.00000000)
## 22) ram< 1951.5 228 46 1 (0.06140351 0.79824561 0.14035088 0.00000000) *
## 23) ram>=1951.5 61 23 2 (0.00000000 0.37704918 0.62295082 0.00000000)
## 46) battery_power< 1467 30 9 1 (0.00000000 0.70000000 0.30000000 0.00000000) *
## 47) battery_power>=1467 31 2 2 (0.00000000 0.06451613 0.93548387 0.00000000) *
## 3) ram>=2235.5 719 344 3 (0.00000000 0.06258693 0.41585535 0.52155772)
## 6) ram< 3013.5 327 94 2 (0.00000000 0.13761468 0.71253823 0.14984709) *
## 7) ram>=3013.5 392 66 3 (0.00000000 0.00000000 0.16836735 0.83163265) *
rpart.plot(fit, extra = 106)
## Warning: extra=106 but the response has 4 levels (only the 2nd level is
## displayed)
#Dự đoán dựa trên tập test
predict_unseen <-predict(fit, df.test, type = 'class')
table_mat <- table(df.test$price_range, predict_unseen)
table_mat
## predict_unseen
## 0 1 2 3
## 0 120 5 0 0
## 1 19 87 19 0
## 2 0 22 81 22
## 3 0 0 19 106
#Tính độ chính xác của mô hình bằng confusion matrix:
accuracy_Test <- sum(diag(table_mat)) / sum(table_mat)
print(paste('Accuracy for test', accuracy_Test))
## [1] "Accuracy for test 0.788"
2.2. KNN: K-Nearest Neighbors
library(tidyverse)
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.1.3
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
library(caret)
## Warning: package 'caret' was built under R version 4.1.3
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
##
## lift
# hyperparameter and model adjustment by Cross Validation method
ctrl <- trainControl(method = "cv", number = 10)
set.seed(1)
knn <- train(
price_range ~ ram + battery_power + px_height,
data = df.train,
method = 'knn',
trControl = ctrl,
tuneGrid = expand.grid(k = seq(1, 15, by = 1))
)
knn
## k-Nearest Neighbors
##
## 1500 samples
## 3 predictor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 1351, 1349, 1351, 1350, 1348, 1350, ...
## Resampling results across tuning parameters:
##
## k RMSE Rsquared MAE
## 1 0.3575093 0.9001711 0.1287431
## 2 0.3111152 0.9230505 0.1367413
## 3 0.2952547 0.9304275 0.1389629
## 4 0.2860624 0.9345924 0.1444746
## 5 0.2846254 0.9353289 0.1499345
## 6 0.2829840 0.9360956 0.1538303
## 7 0.2779913 0.9382954 0.1542945
## 8 0.2793736 0.9376517 0.1592885
## 9 0.2794585 0.9376335 0.1615395
## 10 0.2809038 0.9370557 0.1646211
## 11 0.2808334 0.9371045 0.1671889
## 12 0.2827885 0.9362779 0.1701199
## 13 0.2827774 0.9362637 0.1728964
## 14 0.2835032 0.9359338 0.1749558
## 15 0.2834295 0.9359813 0.1757614
##
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was k = 7.
df.test$predictions <- predict(knn, df.test)
data.frame(
RMSE = RMSE(df.test$predictions, df.test$price_range),
MSE = RMSE(df.test$predictions, df.test$price_range)**2,
Rsquare = R2(df.test$predictions, df.test$price_range)
)
## RMSE MSE Rsquare
## 1 0.2811703 0.07905676 0.9368128
df.train$predictions <- predict(knn, df.train)
data.frame(
RMSE = RMSE(df.train$predictions, df.train$price_range),
MSE = RMSE(df.train$predictions, df.train$price_range)**2,
Rsquare = R2(df.train$predictions, df.train$price_range)
)
## RMSE MSE Rsquare
## 1 0.2430252 0.05906122 0.9527674
2.3. SVM: Support Vector Machine Tiếp theo, sử dụng Support Vector Machine. Đối với các biến x ,sẽ sử dụng 3 giá trị có tương quan cao nhất với phạm vi giá đó là: ram, năng lượng pin và chiều cao px.
set.seed(1)
svm <- svm(price_range~ram+battery_power+px_height, data=df.train, cost=10)
# Root Mean Squared Error (SVM)
predict_svm_train <- predict(svm, df.train)
sqrt(mean(df.train$price_range - predict_svm_train)^2)
## [1] 0.007077715
predict_svm_test <- predict(svm, df.test)
sqrt(mean(df.test$price_range - predict_svm_test)^2)
## [1] 0.00081374
# Mean Squared Error (SVM)
predict_svm_train_2 <- predict(svm, df.train)
mean(df.train$price_range - predict_svm_train_2)^2
## [1] 5.009405e-05
predict_svm_test_2 <- predict(svm, df.test)
mean(df.test$price_range - predict_svm_test_2)^2
## [1] 6.621728e-07
Đầu tiên, thấy rằng sai số của Nhóm là trong phạm vi phần nghìn (cực kỳ nhỏ).Nhóm đang phân loại điện thoại di động thành các khoảng giá sau: 0, 1, 2 và 3. Do đó,Nhóm có thể kết luận rằng lỗi của mô hình là cực kỳ nhỏ và mô hình hoạt động rất tốt.
2.4. Linear Regression Bây giờ,Nhóm sẽ thử tiếp với Linear Regression để thử và dự đoán phạm vi giá. Đầu tiên, nhóm sẽ chỉ sử dụng biến tương quan nhất với phạm vi giá là ram
set.seed(1)
lr.fit = lm(price_range~ram, data=df.train)
summary(lr.fit)
##
## Call:
## lm(formula = price_range ~ ram, data = df.train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.35662 -0.26222 -0.00246 0.26447 1.39274
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5.182e-01 2.521e-02 -20.56 <2e-16 ***
## ram 9.498e-04 1.057e-05 89.83 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4427 on 1498 degrees of freedom
## Multiple R-squared: 0.8434, Adjusted R-squared: 0.8433
## F-statistic: 8070 on 1 and 1498 DF, p-value: < 2.2e-16
Kết quả của Nhóm từ mô hình Linear Regression là khá tốt - biến có ý nghĩa thống kê (như mong đợi), ngoài ra, giá trị R-squared là 0,84 (84%)
Việc thêm pin_power (biến tương quan thứ hai với phạm vi giá) vào có cải thiện mô hình của không?
set.seed(1)
lr.fit2 = lm(price_range~ram+battery_power, data=df.train)
summary(lr.fit2)
##
## Call:
## lm(formula = price_range ~ ram + battery_power, data = df.train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.05656 -0.27630 0.00309 0.24031 1.24513
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.145e+00 3.531e-02 -32.41 <2e-16 ***
## ram 9.466e-04 9.140e-06 103.57 <2e-16 ***
## battery_power 5.101e-04 2.263e-05 22.54 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3826 on 1497 degrees of freedom
## Multiple R-squared: 0.8831, Adjusted R-squared: 0.8829
## F-statistic: 5655 on 2 and 1497 DF, p-value: < 2.2e-16
nó cải thiện mô hình của nhóm! nhóm có thể cải thiện mô hình của mình hơn nữa bằng cách thêm biến tương quan thứ ba vào phạm vi giá (px_height) không?
set.seed(1)
lr.fit3 = lm(price_range~ram+battery_power+px_height, data=df.train)
summary(lr.fit3)
##
## Call:
## lm(formula = price_range ~ ram + battery_power + px_height, data = df.train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.95723 -0.25966 -0.00216 0.24152 0.83879
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.395e+00 3.360e-02 -41.52 <2e-16 ***
## ram 9.477e-04 8.092e-06 117.11 <2e-16 ***
## battery_power 5.030e-04 2.004e-05 25.10 <2e-16 ***
## px_height 4.019e-04 1.976e-05 20.34 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3388 on 1496 degrees of freedom
## Multiple R-squared: 0.9084, Adjusted R-squared: 0.9082
## F-statistic: 4947 on 3 and 1496 DF, p-value: < 2.2e-16
Nhóm nhận được giá trị R-squared là 0,91, tỷ lệ này là 91% (trên 100). Kết quả này rất tốt và nó có nghĩa là Mô hình Linear Regression của nhóm đã hoạt động rất tốt.
Bây giờ, nhóm sẽ tính toán RMSE và MSE cho Mô hình Linear Regression.
# Root Mean Squared Error (LR)
predict_lr.fit3_train <- predict(lr.fit3, df.train)
sqrt(mean(df.train$price_range - predict_lr.fit3_train)^2)
## [1] 6.603066e-15
predict_lr.fit3_test <- predict(lr.fit3, df.test)
sqrt(mean(df.test$price_range - predict_lr.fit3_test)^2)
## [1] 0.001762545
# Mean Squared Error (LR)
predict_lr.fit3_train_2 <- predict(lr.fit3, df.train)
mean(df.train$price_range - predict_lr.fit3_train_2)^2
## [1] 4.360048e-29
predict_lr.fit3_test_2 <- predict(lr.fit3, df.test)
mean(df.test$price_range - predict_lr.fit3_test_2)^2
## [1] 3.106564e-06
Từ kết quả RMSE và MSE của Nhóm, thấy rằng Mô hình Linear Regression của Nhóm hoạt động rất tốt, tương tự như Mô hình SVM của Nhóm.
nhóm đang sử dụng mô hình hồi quy cho một bài toán phân loại. Tại sao điều này hoạt động? Vì biến y của chúng ta sẽ là 0, 1, 2 hoặc 3 nên mô hình của nhóm coi nó như thể nó là hồi quy và chạy. Hơn nữa, nó hoạt động tốt vì nó đánh giá 4 danh mục nhóm (ở trên) dưới dạng các biến định lượng (không phải định tính) và sử dụng Linear Regression để tìm khoảng giá tối ưu cho mỗi quan sát, sau đó được phân loại thành 0, 1, 2 hoặc 3.
hình ảnh 3D bao gồm ram, battery power, pixel height, được tô màu theo dự đoán của Linear Regression về giá là 0, 1, 2 hoặc 3.
fig <- plot_ly(
df.train,
x=~df.train$ram,
y=~df.train$battery_power,
z=~df.train$px_height,
color=predict_lr.fit3_train,
type='scatter3d',
mode='markers')
fig <- fig %>% layout(
title='Ram x Battery Power x Pixel Height',
scene=list(
xaxis=list(title='Ram'),
yaxis=list(title='Battery Power'),
zaxis=list(title='Pixel Height')
))
fig
Từ mô hình 3D, Nhóm có thể thấy một cách trực quan từng biến số đóng góp vào giá của một chiếc Điện thoại di động như thế nào.
*Tổng Kết: Mô hình nào tốt hơn: Decision tree, SVM , Linear Regression, KNN? Từ kết quả, Nhóm thấy rằng các giá trị của Mô hình Linear Regression cho RMSE và MSE tương ứng nhỏ hơn các giá trị RMSE và MSE cho Mô hình SVM và KNN, Decision tree
Vì vậy, Mô hình Linear Regression hoạt động tốt hơn mô hình SVM ,KNN
Giải quyết câu hỏi trọng tâm của Nhóm: Tính năng nào quan trọng nhất trong việc dự đoán Giá điện thoại di động? Đầu tiên, nhìn vào ma trận tương quan, Nhóm thấy rằng ram là biến có tương quan nhất với phạm vi giá, năng lượng pin là biến có tương quan nhiều thứ hai với phạm vi giá và chiều cao px là biến tương quan thứ ba với phạm vi giá.
Bây giờ, nhìn vào phần tóm tắt của Mô hình Linear Regression, thấy rằng cả 3 biến (ram, battery power, pixel height) đều có t-values rất cao, nghĩa là chúng đều rất quan trọng trong việc dự đoán biến y của nhóm. Cụ thể, ram có t-values cao nhất, battery power có t-values cao thứ hai và pixel height có t-values cao thứ ba. “Thứ tự của tầm quan trọng thay đổi” này trực tiếp tương ứng với những phát hiện của nhóm từ ma trận tương quan của chúng tôi ở trên!
Tóm lại, các tính năng quan trọng nhất trong việc dự đoán giá của một chiếc Điện thoại di động là ram, battery power, pixel height.